import { BodyPartArrayType } from '@/utils/common'

/**
 * 攻击任务
 */
export interface AttackTask {
    /**
     * 任务 id
     */
    id: string
    /**
     * 任务名字
     */
    name?: string
    /**
     * 目标房间
     */
    roomName: string
    /**
     * 攻击者
     */
    attacker: string[]
    /**
     * 是否孵化完成
     */
    spawnComplete?: boolean
    /**
     * 攻击者的身体部件
     */
    body: BodyPartArrayType
    /**
     * 数量
     */
    number: number
    /**
     * 策略
     */
    strategy?: string
}

/**
 * 攻击任务内存
 */
export interface AttackMemory {
    tasks: AttackTask[]
}

/**
 * 四人小队任务
 */
export interface SquadTask {
    /**
     * 任务 id
     */
    id: string
    /**
     * 任务名字
     */
    name?: string
    /**
     * 目标房间
     */
    roomName: string
    /**
     * 攻击者
     */
    squadMember: string[]
    /**
     * 是否孵化完成
     */
    spawnComplete?: boolean
    /**
     * 四人小队中攻击者身体部件
     */
    attackerBody: BodyPartArrayType
    /**
     * 四人小队中治疗者身体部件
     */
    healerBody: BodyPartArrayType
    /**
     * 攻击者 boost资源列表
     */
    attackerBoost?: MineralBoostConstant[]
    /**
     * 治疗者 boost资源列表
     */
    healerBoost?: MineralBoostConstant[]
    /**
     * 小队队形
     */
    formation?: SquadMoveType
}

/**
 * 四人小队移动方式
 */
export type SquadMoveType = 'line' | 'square'

/**
 * 四人小队内存
 */
export interface SquadMemory {
    tasks: SquadTask[]
}

/**
 * 人海任务
 */
export interface hugeCrowdTask {
    /**
     * 任务 id
     */
    id: string
    /**
     * 目标房间
     */
    roomName: string
    /**
     * 人海
     */
    hugeCrowd: string[]
    /**
     * 是否孵化完成
     */
    spawnComplete?: boolean
    /**
     * 集合旗帜周围多大范围可以站爬
     */
    range: number
    /**
     * 能否总攻
     */
    canAttack?: boolean
}

/**
 * 人海内存
 */
export interface hugeCrowdMemory {
    tasks: hugeCrowdTask[]
}

/**
 * 小队移动方式
 */
export type TeamMoveType = 'line' | 'square'

/**
 * 战争管理内存
 */
export interface WarMemory {
    attack?: AttackMemory
    squad?: SquadMemory
    hugeCrowd?: hugeCrowdMemory
}

declare global {
    interface RoomMemory {
        war: WarMemory
    }
}
